#ifndef BLE_HID_REMOTE_H
#define BLE_HID_REMOTE_H

#include "bt_type.h"
#include "bt_system.h"
#include "bt_gatt.h"
#include "bt_gap_le.h"

// HID服务UUID
#define BLE_UUID_HID_SERVICE 0x1812

// 按键定义
#define KEY_UP          0x52    // 上键
#define KEY_DOWN        0x51    // 下键
#define KEY_LEFT        0x50    // 左键
#define KEY_RIGHT       0x4F    // 右键
#define KEY_PHOTO       0x28    // 拍照(Enter)
#define KEY_VIDEO       0x44    // 录像(F11)
#define KEY_CONFIRM     0x28    // 确认(Enter)
#define KEY_BACK        0x29    // 返回(Escape)
#define KEY_PREV        0xB6    // 上一首
#define KEY_NEXT        0xB5    // 下一首

// GPIO按键定义
#define GPIO_KEY_UP     HAL_GPIO_0
#define GPIO_KEY_DOWN   HAL_GPIO_1
#define GPIO_KEY_LEFT   HAL_GPIO_2
#define GPIO_KEY_RIGHT  HAL_GPIO_3
#define GPIO_KEY_PHOTO  HAL_GPIO_4
#define GPIO_KEY_VIDEO  HAL_GPIO_5
#define GPIO_KEY_CONFIRM HAL_GPIO_6
#define GPIO_KEY_BACK   HAL_GPIO_7
#define GPIO_KEY_PREV   HAL_GPIO_8
#define GPIO_KEY_NEXT   HAL_GPIO_9

// 按键报告最大长度
#define HID_KEYS_MAX_LEN     6

// 按键状态
typedef struct {
    uint8_t modifier;  // 功能键状态(Ctrl, Shift等)
    uint8_t reserved;  // 保留字节
    uint8_t keys[HID_KEYS_MAX_LEN]; // 普通按键值
} hid_keys_t;

// HID服务结构体
typedef struct {
    bt_handle_t connection_handle;    // 连接句柄
    bt_handle_t service_handle;       // 服务句柄
    bt_handle_t report_cccd_handle;   // 报告CCCD句柄
    bool is_notification_enabled;     // 通知是否使能
} ble_hid_service_t;

// 初始化HID服务
bt_status_t ble_hid_init(ble_hid_service_t *p_hid);

// 发送按键报告
bt_status_t ble_hid_keys_send(ble_hid_service_t *p_hid, hid_keys_t *p_keys);

#endif // BLE_HID_REMOTE_H 